/**
 * 
 */
package fr.toussna.service;

import java.util.List;

import fr.toussna.entity.Article;
import fr.toussna.entity.Category;
import fr.toussna.entity.Comment;
import fr.toussna.entity.Member;
import fr.toussna.exception.ElementNotExistException;

/**
 * Cette interface regroupe les services exposes par l'application pour manipuler
 * les membres et les catégories.
 * <p>Elle sert comme une façade pour regrouper toutes les méthodes de service;
 * On pourra aussi ultérieurement exposer ces méthodes en web services.<br/>
 * Spring injectera les dépendances pour les DAOs.
 * </p>
 * 
 * @author My
 * @version 2.0
 * 
 */
public interface ArticleService {
	
	/**
	 * Renvoi les articles qui contiennent un mot clé.
	 * @param key
	 * 				Le mot clé.
	 * @return La liste des articles.
	 */
	public List<Article> searchArticle(String key);
	
	/**
	 * Rajoute un nouveau article dans le système
	 * @param article
	 * 				L'article a rajouter
	 * @return L'article avec son identifiant
	 */
	public Article addArticle(Article article);
	
	/**
	 * Supprime un article du système
	 * @param article
	 * 				L'article a supprimer
	 */
	public void deleteArticle(Article article);
	
	/**
	 * Met a jour un article
	 * @param article
	 * 				article contenant la mise a jour
	 */
	public void updateArticle(Article article);
	
	/**
	 * Renvoi un article a partir d'un identifiant
	 * Renvoi aussi la liste des commentaires de cette article
	 * @param id
	 * 			identifiant
	 * @return Article
	 */
	public Article findArticle(long id)throws ElementNotExistException;
	
	/**
	 * Rajoute un commentaire a un article
	 * @param comment
	 * 					Le commentaire a rajouter
	 * @return commenatire rajouté.
	 */
	public Comment addComment(Comment comment)throws ElementNotExistException;
	
	
	
	/**
	 * Renvoi la liste des articles de la même catégorie.
	 * @param category
	 * 					La catégorie dont on veut retrouver tous les articles.
	 * @return La liste des articles.
	 */
	public List<Article> getCategoryOfArticle(Category category);
	
	/**
	 * Renvoi la liste des articles du meme membre.
	 * @param member
	 * 				Le membre dont on veut retrouver les articles.
	 * @return La liste des articles.
	 */
	public List<Article> findArticleOfMember(Member member);
}
